﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

namespace ankietyzacja.Dao
{
    public class EmailDao : Dao
    {


        public EmailDao(SqlConnection c, SqlTransaction t)
            : base(c, t)
        {
        }



        public Int32 kopiujEmail(Int32 emailId)
        {
            String KopiujEmailSql =
         @" INSERT INTO EMAIL
           (TEMAT
           ,TRESC
           ,DATAWYSLANIA
           ,DATAUTWORZENIA)
    SELECT TEMAT
           ,TRESC
           ,NULL
           ,GETDATE()
      FROM EMAIL
     WHERE EMAIL_ID = @EMAIL_ID;
    SELECT scope_identity(); ";


            SqlCommand KopiujEmailCommand = new SqlCommand(KopiujEmailSql, connection, transaction);
            KopiujEmailCommand.Parameters.Add(new SqlParameter("@EMAIL_ID", emailId));

            return System.Convert.ToInt32(KopiujEmailCommand.ExecuteScalar());

        }

        public Int32 kopiujUzytkownikEmail(Int32 oldEmailId, Int32 newEmailId)
        {

            String KopiujUzytkownikEmailSql =
        @" INSERT INTO UZYTKOWNIK_X_EMAIL
           (UZYTKOWNIK_ID
           ,EMAIL_ID)
    SELECT UZYTKOWNIK_ID
           ,@EMAIL_ID_NEW
      FROM UZYTKOWNIK_X_EMAIL
     WHERE EMAIL_ID = @EMAIL_ID;
     ";


            SqlCommand KopiujUzytkownikEmailCommand = new SqlCommand(KopiujUzytkownikEmailSql, connection, transaction);
            KopiujUzytkownikEmailCommand.Parameters.Add(new SqlParameter("@EMAIL_ID", oldEmailId));
            KopiujUzytkownikEmailCommand.Parameters.Add(new SqlParameter("@EMAIL_ID_NEW", newEmailId));

            return KopiujUzytkownikEmailCommand.ExecuteNonQuery();

        }

        public Int32 updateDataWyslania(Int32 emailId)
        {

            String sql =
        @"  UPDATE EMAIL
           SET DATAWYSLANIA = GETDATE()
     WHERE EMAIL_ID = @EMAIL_ID;
     ";


            SqlCommand command = new SqlCommand(sql, connection, transaction);
            command.Parameters.Add(new SqlParameter("@EMAIL_ID", emailId));

            return command.ExecuteNonQuery();

        }




        public DataTable load(Int32 emailId)
        {

            String sql =
        @" SELECT *
             FROM EMAIL
     WHERE EMAIL_ID = @EMAIL_ID;
     ";
            SqlCommand sqlCommand = new SqlCommand(sql, connection, transaction);
            sqlCommand.Parameters.Add(new SqlParameter("@EMAIL_ID", emailId));


            DataTable dataTable = new DataTable();

            new SqlDataAdapter(sqlCommand).Fill(dataTable);

            return dataTable;

        }

        public DataTable loadAdresaci(Int32 emailId)
        {

            String sql =
        @" SELECT m.Email, x.EMAIL_ID, x.UZYTKOWNIK_ID, u.NUMERALBUMU, u.KONTOCZYNNE, u.ANKIETYZOWALNY, u.IMIE, u.NAZWISKO, u.TRYBSTUDIOW_ID, u.ROKUKONCZENIASTUDIOW
             FROM UZYTKOWNIK_X_EMAIL x, UZYTKOWNIK u, aspnet_Membership m
     WHERE x.UZYTKOWNIK_ID = u.UZYTKOWNIK_ID
       AND x.UZYTKOWNIK_ID = m.UserId
       AND x.EMAIL_ID = @EMAIL_ID;
     ";
            SqlCommand sqlCommand = new SqlCommand(sql, connection, transaction);
            sqlCommand.Parameters.Add(new SqlParameter("@EMAIL_ID", emailId));


            DataTable dataTable = new DataTable();

            new SqlDataAdapter(sqlCommand).Fill(dataTable);

            return dataTable;

        }

        public Int32 insertAdresaci(Int32 emailId, String imieFilter, String nazwiskoFilter, String numerAlbumuFilter, String trybStudiowFilter, String rokUkonczeniaFilter)
        {


            String InsertAdresaciSql = @"
INSERT INTO UZYTKOWNIK_x_EMAIL
           (UZYTKOWNIK_ID
           ,EMAIL_ID)
SELECT u.UZYTKOWNIK_ID, @EMAIL_ID 
  FROM UZYTKOWNIK AS u 
 WHERE (u.NUMERALBUMU = @NUMERALBUMU OR @NUMERALBUMU = '')
   AND (u.IMIE like '%' + @IMIE + '%' OR @IMIE = '')
   AND (u.NAZWISKO like '%' + @NAZWISKO + '%' OR @NAZWISKO = '')
   AND (u.TRYBSTUDIOW_ID = @TRYBSTUDIOW_ID OR @TRYBSTUDIOW_ID = 0)
   AND (u.ROKUKONCZENIASTUDIOW = @ROKUKONCZENIASTUDIOW OR @ROKUKONCZENIASTUDIOW = '')
   AND u.ANKIETYZOWALNY = 1
   AND u.KONTOCZYNNE = 1
   AND not exists (
      SELECT 1
        FROM UZYTKOWNIK_x_EMAIL uxe
      WHERE uxe.UZYTKOWNIK_ID = u.UZYTKOWNIK_ID
        AND uxe.EMAIL_ID = @EMAIL_ID) ";


            SqlCommand InsertAdresaciCommand = new SqlCommand(InsertAdresaciSql, connection);


            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@NUMERALBUMU", numerAlbumuFilter));
            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@IMIE", imieFilter));
            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@NAZWISKO", nazwiskoFilter));
            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@TRYBSTUDIOW_ID", trybStudiowFilter));
            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@ROKUKONCZENIASTUDIOW", rokUkonczeniaFilter));

            InsertAdresaciCommand.Parameters.Add(new SqlParameter("@EMAIL_ID", emailId));

            return InsertAdresaciCommand.ExecuteNonQuery();

        }



    }


}